/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.petshop.dao;

import br.com.petshop.entidades.Agenda;
import br.com.petshop.entidades.AgendaType;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Sidney
 * @see GenericDAO
 * @version 1.0
 * esta classe contem os metodos basicos para manipulacao do banco de dados, extende a classe GenericDAO e tem
 * como proposito manipular a tabela agenda no banco de dados.Para pegar o atributo que corresponde ao ID_Animal,
 * que identifica o animal com agenda para atendimento no dia, no metodo populateAnimal() e criada uma 
 * instancia do AnimalDAO.
 */
public class AgendaDAO extends GenericDAO {

    public int adicionarAgenda(Agenda agenda) throws SQLException {
        agenda.setId(getNextId("agenda"));
        String query = "INSERT INTO petshop.agenda (Id, Id_Animal,Data_Agendamento,Tipo,Total)VALUES"
                + "(?,?,?,?,?)";
        executeCommand(query, agenda.getId(), agenda.getIdAnimal().getId(), agenda.getDataAgendada(), agenda.getTipo().toString(),
                agenda.getTotal());
        return agenda.getId();
    }

    public void removerAgenda(int idAgenda) throws SQLException {
        executeCommand("DELETE FROM petshop.agenda WHERE Id = ?", idAgenda);
    }

    public void atualizarAgenda(Agenda agenda) throws SQLException {
        String query = "UPDATE petshop.agenda SET Id_Animal = ?, Data_Agendamento = ?,"
                + "Tipo = ?, Total = ? WHERE Id = ?";
        executeCommand(query, agenda.getIdAnimal().getId(), agenda.getDataAgendada(), agenda.getTipo().toString(),
                agenda.getTotal(), agenda.getId());
    }

    public Agenda getAgenda(int idAgenda) throws SQLException {
        ResultSet rs = executeQuery("SELECT * FROM petshop.agenda WHERE Id = ?", idAgenda);
        Agenda ag = null;
        while (rs.next()) {
            ag = populateAgenda(rs);
        }
        rs.close();
        return ag;
    }

    public static Agenda populateAgenda(ResultSet rs) throws SQLException {
        AnimalDAO anmDAO = new AnimalDAO();
        Agenda retAgenda = new Agenda();
        retAgenda.setId(rs.getInt("Id"));
        retAgenda.setIdAnimal(anmDAO.getAnimal(rs.getInt("Id_Animal")));
        retAgenda.setDataAgendada(rs.getDate("Data_Agendamento"));
        retAgenda.setTipo(AgendaType.valueOf(rs.getString("Tipo")));
        retAgenda.setTotal(rs.getFloat("Total"));

        return retAgenda;
    }

    /**
     * Este metodo representa a lista com a agenda do dia
     */
   public List <Agenda> getAgendamentos() throws SQLException {
        List<Agenda> agenda = new LinkedList<Agenda>();
        ResultSet rs = executeQuery("SELECT * FROM petshop.agenda");
        while (rs.next()) {
            agenda.add(populateAgenda(rs));
        }
        rs.close();
        return agenda;
    }
}
